有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

正则表达式使用正则表达式来查找任何数字或重复的单词

这不是家庭作业。我只是想学好正则表达式

我试图在一个字符串中找到一个或多个重复的单词。实际上,我试图在一个字符串中找到一个或多个重复的单词,并删除重复。我看过link1link2并尝试使用它们的模式,但它们似乎对我不起作用

这是我的

String pattern = "\\b(\\w+)\\b\\s+\\1\\b";
Pattern p = Pattern.compile(pattern Pattern.CASE_INSENSITIVE);
//This is actually read from console
String input = "Goodbye bye bye world world world";
Matcher m = p.matcher(input);
while(m.fine())
{
    System.out.println("group: " + m.group() + " start: " + m.start() + " end: " + m.end());
    input = input.replaceAll(m.group(), m.group(1);
}
System.out.println(input);

这是我的输出:
组:再见开始:8结束:15组(1):再见
组:世界开始:16结束:27组(1):世界
再见了世界

我对第二行输出的期望是“组:世界开始:16结束:32”

所以,在我看来,这似乎只匹配第一个重复的单词。我对该模式的理解是\b-单词边界,\w+-在单词的一部分或多部分上(我不确定是单词重复而没有空格,即“wordword”还是一个或多个单词重复而带有空格,即“word word”),然后\b\s+-然后是任何空格\1-分组单词,最后\b-再次是空格

有人能给我解释一下发生了什么,应该是什么吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    你对正则表达式的理解基本上是正确的,只是正则表达式只检查一行中的两个单词,而不是一行中的两个或更多单词

    要检查是否有两个或多个单词,请将正则表达式的第二部分分组,并在其后面加一个加号,以便该单词可以像这样重复两次以上:

    \\b(\\w+)\\b(\\s+\\1\\b)+